package com.bd.scm.module.role.service.impl;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bd.scm.dao.mapper.role.BdUserAdminMapper;
import com.bd.scm.domain.dto.role.BdUserAdminDto;
import com.bd.scm.domain.dto.role.BdUserAdminParam;
import com.bd.scm.domain.models.role.BdUserAdmin;
import com.bd.scm.domain.models.user.DtUser;
import com.bd.scm.module.common.BaseServiceImpl;
import com.bd.scm.module.enums.CodeRuleEnum;
import com.bd.scm.module.role.service.BdUserAdminService;
import com.bd.scm.module.user.service.impl.DtUserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author Mason
 * @since 2021-01-11
 */
@Service
public class BdUserAdminServiceImpl extends BaseServiceImpl<BdUserAdminMapper, BdUserAdmin> implements BdUserAdminService {
    @Resource
    private BdUserAdminMapper bdUserAdminMapper;

    @Autowired
    private DtUserServiceImpl dtUserService;


    /**
     * 查询管理员账户.
     *
     * @param bdUserAdminParam
     * @return
     */
    @Override
    public List<BdUserAdminDto> getAccountList(BdUserAdminParam bdUserAdminParam) {
        return bdUserAdminMapper.getAccountList(bdUserAdminParam);
    }

    /**
     * 添加或修改管理员账户.
     *
     * @param bdUserAdminDto
     * @param loginer
     */
    @Override
    public JSONObject addOrUpdateUser(BdUserAdminDto bdUserAdminDto, Integer loginer) {
        JSONObject result = null;
        if (null == bdUserAdminDto.getId()) {
            //新增
            //要判断账户是否存在
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.eq("user_name", bdUserAdminDto.getUserName());
            queryWrapper.eq("status", 0);
            BdUserAdmin bdUserAdmin = this.getOne(queryWrapper);
            if (null == bdUserAdmin) {
                //获取账户的实际ID（账户名对应dt_user的user_no,可以不匹配到）
                QueryWrapper queryWrapper2 = new QueryWrapper();
                queryWrapper2.eq("user_no", bdUserAdminDto.getUserName());
                DtUser dtUser = dtUserService.getOne(queryWrapper2);
                if (null != dtUser) {
                    bdUserAdminDto.setEmployeeId(dtUser.getUserSerial());
                }
                Integer id = getMaxId(CodeRuleEnum.ADMINDDEFINITION);
                bdUserAdminDto.setId(id);
                bdUserAdminDto.setCreateId(loginer);
                //插入账户表（bd_user_admin）
                bdUserAdminMapper.insert(bdUserAdminDto);
                //权限组配置表（bd_role_user）先删除后插入
                bdUserAdminMapper.deleteRoleUser(id);
                for (String roleId : bdUserAdminDto.getRoleIds()) {
                    bdUserAdminMapper.insertRoleUser(Integer.parseInt(roleId), id);
                }

            } else {
                result = new JSONObject();
                result.put("message", "保存失败，该账户已存在！");
            }
        } else {
            //修改
            bdUserAdminDto.setUpdateId(loginer);
            bdUserAdminDto.setUpdateTime(new Date());
//            UpdateWrapper updateWrapper = new UpdateWrapper();
//            updateWrapper.set("real_name",bdUserAdminDto.getRealName());
//            updateWrapper.set("password",bdUserAdminDto.getPassword());
//            updateWrapper.set("tel",bdUserAdminDto.getTel());
//            updateWrapper.set("email",bdUserAdminDto.getEmail());
//            updateWrapper.eq("id",bdUserAdminDto.getId());
//            bdUserAdminMapper.update(bdUserAdminDto,updateWrapper);
            bdUserAdminMapper.updateById(bdUserAdminDto);
            //更新权限组配置表（bd_role_user）先删除后插入
            bdUserAdminMapper.deleteRoleUser(bdUserAdminDto.getId());
            for (String roleId : bdUserAdminDto.getRoleIds()) {
                bdUserAdminMapper.insertRoleUser(Integer.parseInt(roleId), bdUserAdminDto.getId());
            }
        }
        return result;
    }

    /**
     * 删除管理员账户.
     *
     * @param bdUserAdminParam
     * @param loginer
     */
    @Override
    public void deleteAccount(BdUserAdminParam bdUserAdminParam, Integer loginer) {
        if (!bdUserAdminParam.getUserIds().isEmpty()) {
            for (Integer userId : bdUserAdminParam.getUserIds()) {
                //删除账户和角色的配置表
                bdUserAdminMapper.deleteRoleUser(userId);
                //修改账户表的status字段为1（1标识删除）
                bdUserAdminMapper.deleteUserById(userId, loginer);
            }
        }
    }
}
